// film_week_controller.dart

import 'package:film/model/film_model.dart';
import 'package:film/service/api_service.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

// 2. 定义页面控制器 (Controller)
class FilmWeekController extends GetxController with GetSingleTickerProviderStateMixin {
  final DioService apiService = DioService();

  // Tab控制器，用于同步TabBar和TabBarView
  late final TabController tabController;

  // 星期几的标签列表
  final List<String> weekDays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"];
  final List<String> weekDay = ["一", "二", "三", "四", "五", "六", "日"];

  // 使用一个响应式的Map来存储每一天的数据列表
  // key 是星期的索引 (0=周一, 1=周二, ...), value 是那一天的番剧列表
  // 使用.obs使其成为响应式变量
  final weekFilmList = <Film>[].obs;

  // 存储每一天的加载状态
  final isLoading = <int, bool>{}.obs;

  @override
  void onInit() {
    super.onInit();
    // 获取当前是周几 (DateTime.now().weekday 返回 1-7 分别对应周一到周日)
    int currentDayIndex = DateTime.now().weekday - 1;

    // 初始化TabController
    tabController = TabController(
      length: weekDays.length,
      vsync: this,
      initialIndex: currentDayIndex, // 设置初始选中的Tab为今天
    );

    // 为TabController添加监听器，当Tab切换时触发
    tabController.addListener(() {
      // 确保是在Tab切换动画结束后才执行，防止重复调用
      if (!tabController.indexIsChanging) {
        final index = tabController.index;
        // 如果对应天的数据尚未加载，则发起请求
        fetchDataForDay(index);
      }
    });

    // 首次进入页面时，加载当天的数据
    fetchDataForDay(currentDayIndex);
  }

  /// 模拟为指定的一天获取数据
  void fetchDataForDay(int dayIndex) async {
    SearchCriteria criteria = SearchCriteria(page: "1", limit: "3", resultType: "1", vodWeekday: weekDay[dayIndex]);
    ApiResponse<List<Film>> response = await apiService.searchVideo(criteria);
    // 解析JSON数据并更新到weekFilmList中
    weekFilmList.assignAll(response.data ?? []);
  }

  @override
  void onClose() {
    // 页面销毁时，释放TabController资源，防止内存泄漏
    tabController.dispose();
    super.onClose();
  }
}
